﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using QuizzAdminData;

namespace QuizzAdmin
{
    public partial class VragenForm : Form
    {
        private bool _gebruikFilter = false;
        private string _filterText = "";

        private List<Vraag> vragen = new List<Vraag>();

        public VragenForm()
        {
            InitializeComponent();
        }

        private void btnFilter_Click(object sender, EventArgs e)
        {
            VragenFilterForm frm = new VragenFilterForm();

            frm.FilterText = _filterText;

            DialogResult res = frm.ShowDialog();

            if (res == DialogResult.Yes)
            {
                _gebruikFilter = true;
                _filterText = frm.FilterText;
            }
            else if (res == DialogResult.No)
            {
                _gebruikFilter = false;
                _filterText = "";
            }

            LaadVragen();
            lvVragen.Focus();
        }

        public void LaadVragen()
        {
            try
            {
                lvVragen.Items.Clear();

                vragen = VragenDB.GetVragen();

                if (vragen.Count > 0)
                {
                    int index = 0;
                    foreach (Vraag v in vragen)
                    {
                        if (_gebruikFilter && v.Vraag_tekst.ToLower().Contains(_filterText.ToLower()))
                        {
                            lvVragen.Items.Add(v.Id.ToString());
                            lvVragen.Items[index].SubItems.Add(v.Vraag_tekst);
                            index++;
                        }
                        else if (!_gebruikFilter)
                        {
                            lvVragen.Items.Add(v.Id.ToString());
                            lvVragen.Items[index].SubItems.Add(v.Vraag_tekst);
                            index++;
                        }
                    }
                    if (index > 0)
                    {
                        lvVragen.Items[0].Selected = true;
                    }
                    else
                        btnBewerken.Enabled = false;
                }
                else
                {
                    btnBewerken.Enabled = false;
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }

            UpdateAntwoorden();

        }

        private void VragenForm_Load(object sender, EventArgs e)
        {
            LaadVragen();
        }

        private void lvVragen_SelectedIndexChanged(object sender, EventArgs e)
        {
            UpdateAntwoorden();
        }

        private void UpdateAntwoorden()
        {
            lvAntwoorden.Items.Clear();
            if (lvVragen.Items.Count > 0)
            {
                if (lvVragen.SelectedItems.Count == 1)
                {
                    int selectedVraag = lvVragen.SelectedIndices[0];

                    if (vragen[selectedVraag].Antwoorden.Count > 0)
                    {
                        int index = 0;

                        foreach (Antwoord a in vragen[selectedVraag].Antwoorden)
                        {
                            lvAntwoorden.Items.Add(a.Id.ToString());
                            lvAntwoorden.Items[index].SubItems.Add(a.AntwoordTekst);
                            if (a.Juist)
                            {
                                lvAntwoorden.Items[index].SubItems.Add("Juist");
                            }
                            else
                            {
                                lvAntwoorden.Items[index].SubItems.Add("Fout");
                            }
                            index++;
                        }
                    }
                }
            }
        }

        private void btnNieuwAntwoord_Click(object sender, EventArgs e)
        {


            if (lvVragen.SelectedItems.Count == 1)
            {

                int selectedVraag = lvVragen.SelectedIndices[0];

                AntwoordBewerkForm frm = new AntwoordBewerkForm(vragen[selectedVraag].Id);

                if (frm.ShowDialog() == DialogResult.OK)
                {
                    LaadVragen();
                    lvVragen.Items[selectedVraag].Selected = true;
                }

            }
            else
            {
                MessageBox.Show("Gelieve een vraag te selecteren om antwoorden aan toe te voegen.");
            }
        }

        private void btnBewerkAntwoord_Click(object sender, EventArgs e)
        {
            if (lvAntwoorden.SelectedItems.Count == 1)
            {

                int selectedVraag = lvVragen.SelectedIndices[0];
                int selectedAntwoord = lvAntwoorden.SelectedIndices[0];

                AntwoordBewerkForm frm = new AntwoordBewerkForm(vragen[selectedVraag].Id, vragen[selectedVraag].Antwoorden[selectedAntwoord].Id);

                if (frm.ShowDialog() == DialogResult.OK)
                {
                    LaadVragen();
                    lvVragen.Items[selectedVraag].Selected = true;
                }

            }
            else
            {
                MessageBox.Show("Gelieve een antwoord te selecteren om te bewerken.");
            }
        }

        private void btnVerwijderAntwoord_Click(object sender, EventArgs e)
        {
            if (lvAntwoorden.SelectedItems.Count == 1)
            {
                int selectedVraag = lvVragen.SelectedIndices[0];
                int selectedAntwoord = lvAntwoorden.SelectedIndices[0];

                if (MessageBox.Show("Ben je zeker dat je dit antwoord wilt verwijderen?",
                "verwijderen",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    AntwoordenDB.DeleteAntwoord(vragen[selectedVraag].Antwoorden[selectedAntwoord].Id);
                    LaadVragen();
                }
            }
            else
            {
                MessageBox.Show("Gelieve een antwoord te selecteren om te verwijderen");
            }

        }
    }
}
